bitkeeper revision 1.1108.33.33 (410e8a32DLC2s_wTAj-ethTgkpaxYg)
authorcl349@freefall.cl.cam.ac.uk <cl349@freefall.cl.cam.ac.uk>
Mon, 2 Aug 2004 18:38:42 +0000 (18:38 +0000)
committercl349@freefall.cl.cam.ac.uk <cl349@freefall.cl.cam.ac.uk>
Mon, 2 Aug 2004 18:38:42 +0000 (18:38 +0000)
clip vbd extents to the size of the underlying device

linux-2.6.7-xen-sparse/drivers/xen/blkback/vbd.c

index d05393cb0bcc7c6227f6a53f2c0d95624988d3eb..23056b72d07fc788c6addc8be079291cff6f8c4e 100644 (file)
@@ -81,9 +81,7 @@ void vbd_grow(blkif_be_vbd_grow_t *grow)
     vbd_t              *vbd = NULL;
     struct rb_node     *rb;
     blkif_vdev_t        vdevice = grow->vdevice;
-#if 0
     unsigned long       sz;
-#endif
 
 
     blkif = blkif_find_by_handle(grow->domid, grow->blkif_handle);
@@ -127,11 +125,11 @@ void vbd_grow(blkif_be_vbd_grow_t *grow)
     x->extent.device        = grow->extent.device;
     /* XXXcl see comments at top of open_by_devnum */
 #if 01
+#ifdef DONT_BLKDEV_GET
     x->bdev = bdget(vbd_map_devnum(x->extent.device));
-#ifndef DONT_BLKDEV_GET
-    if (x->bdev)
-       x->bdev = open_by_devnum(vbd_map_devnum(x->extent.device),
-                                vbd->readonly ? FMODE_READ : FMODE_WRITE);
+#else
+    x->bdev = open_by_devnum(vbd_map_devnum(x->extent.device),
+                            vbd->readonly ? FMODE_READ : FMODE_WRITE);
 #endif
     if (x->bdev == NULL) {
        PRINTK("vbd_grow: device %08x doesn't exist.\n", x->extent.device);
@@ -144,17 +142,15 @@ void vbd_grow(blkif_be_vbd_grow_t *grow)
     x->extent.sector_length = grow->extent.sector_length;
     x->next                 = (blkif_extent_le_t *)NULL;
 
-#if 0
-    if( !blk_size[MAJOR(x->extent.device)] )
+    if( x->bdev->bd_disk == NULL || x->bdev->bd_part == NULL )
     {
         PRINTK("vbd_grow: device %08x doesn't exist.\n", x->extent.device);
        grow->status = BLKIF_BE_STATUS_EXTENT_NOT_FOUND;
        goto out;
     }
     
-    /* convert blocks (1KB) to sectors */
-    sz = blk_size[MAJOR(x->extent.device)][MINOR(x->extent.device)] * 2;    
-#endif
+    /* get size in sectors */
+    sz = x->bdev->bd_part->nr_sects;
 
     if ( x->extent.sector_start > 0 )
     {
@@ -163,7 +159,6 @@ void vbd_grow(blkif_be_vbd_grow_t *grow)
        goto out;
     }
 
-#if 0
     /*
      * NB. This test assumes sector_start == 0, which is always the case
      * in Xen 1.3. In fact the whole grow/shrink interface could do with
@@ -174,7 +169,6 @@ void vbd_grow(blkif_be_vbd_grow_t *grow)
     
     DPRINTK("vbd_grow: requested_len %llu actual_len %lu\n", 
             x->extent.sector_length, sz);
-#endif
 
     for ( px = &vbd->extents; *px != NULL; px = &(*px)->next ) 
         continue;